/**
 * 环境检测工具
 * 用于识别当前运行环境
 */

let cachedIsDevTools = null;
let cachedSystemInfo = null;
let cachedBluetoothSupport = null;
let cachedWifiSupport = null;

/**
 * 检测是否在开发者工具中运行
 * @returns {boolean} 是否在开发者工具中运行
 */
function isDevTools() {
  // 使用缓存的结果，避免重复调用系统API
  if (cachedIsDevTools !== null) {
    return cachedIsDevTools;
  }
  
  try {
    const systemInfo = getSystemInfo();
    
    // 标准的开发者工具环境检测
    const platform = systemInfo.platform;
    const isDevTools = platform === 'devtools';
    
    // 缓存结果
    cachedIsDevTools = isDevTools;
    
    return isDevTools;
  } catch (e) {
    console.error('检测开发者工具环境失败', e);
    return false;
  }
}

/**
 * 获取系统信息
 * @returns {Object} 系统信息对象
 */
function getSystemInfo() {
  // 使用缓存的系统信息
  if (cachedSystemInfo !== null) {
    return cachedSystemInfo;
  }
  
  try {
    const systemInfo = wx.getSystemInfoSync();
    
    // 缓存系统信息
    cachedSystemInfo = systemInfo;
    
    return systemInfo;
  } catch (e) {
    console.error('获取系统信息失败', e);
    return {};
  }
}

/**
 * 检测是否在iOS系统上运行
 * @returns {boolean} 是否在iOS系统上运行
 */
function isIOS() {
  try {
    const systemInfo = getSystemInfo();
    return systemInfo.platform === 'ios';
  } catch (e) {
    console.error('检测iOS环境失败', e);
    return false;
  }
}

/**
 * 检测是否在Android系统上运行
 * @returns {boolean} 是否在Android系统上运行
 */
function isAndroid() {
  try {
    const systemInfo = getSystemInfo();
    return systemInfo.platform === 'android';
  } catch (e) {
    console.error('检测Android环境失败', e);
    return false;
  }
}

/**
 * 检测是否支持蓝牙功能
 * @returns {boolean} 是否支持蓝牙功能
 */
function supportBluetooth() {
  // 使用缓存的结果，避免重复检测
  if (cachedBluetoothSupport !== null) {
    return cachedBluetoothSupport;
  }
  
  try {
    // 如果在开发者工具中运行，默认为支持蓝牙（但实际功能可能受限）
    if (isDevTools()) {
      cachedBluetoothSupport = true;
      return true;
    }
    
    // 检查系统是否支持蓝牙API
    const isSupported = wx.canIUse('openBluetoothAdapter') && 
                        wx.canIUse('getBluetoothAdapterState');
    
    // 缓存结果
    cachedBluetoothSupport = isSupported;
    
    return isSupported;
  } catch (e) {
    console.error('检测蓝牙支持失败', e);
    return false;
  }
}

/**
 * 检测是否支持WiFi功能
 * @returns {boolean} 是否支持WiFi功能
 */
function supportWifi() {
  // 使用缓存的结果，避免重复检测
  if (cachedWifiSupport !== null) {
    return cachedWifiSupport;
  }
  
  try {
    // 如果在开发者工具中运行，默认为支持WiFi（但实际功能可能受限）
    if (isDevTools()) {
      cachedWifiSupport = true;
      return true;
    }
    
    // 检查系统是否支持WiFi API
    const isSupported = wx.canIUse('getConnectedWifi') && 
                        wx.canIUse('startWifi');
    
    // 缓存结果
    cachedWifiSupport = isSupported;
    
    return isSupported;
  } catch (e) {
    console.error('检测WiFi支持失败', e);
    return false;
  }
}

/**
 * 检测微信版本是否支持特定API
 * @param {string} apiName 要检测的API名称
 * @returns {boolean} 是否支持该API
 */
function canIUse(apiName) {
  return wx.canIUse(apiName);
}

/**
 * 获取系统主题
 * @returns {string} 系统主题（dark/light/unknown）
 */
function getSystemTheme() {
  try {
    const systemInfo = getSystemInfo();
    return systemInfo.theme || 'light';
  } catch (e) {
    console.error('获取系统主题失败', e);
    return 'light';
  }
}

/**
 * 获取屏幕尺寸信息
 * @returns {Object} 屏幕尺寸信息
 */
function getScreenInfo() {
  try {
    const systemInfo = getSystemInfo();
    
    return {
      width: systemInfo.screenWidth,
      height: systemInfo.screenHeight,
      windowWidth: systemInfo.windowWidth,
      windowHeight: systemInfo.windowHeight,
      pixelRatio: systemInfo.pixelRatio,
      statusBarHeight: systemInfo.statusBarHeight
    };
  } catch (e) {
    console.error('获取屏幕信息失败', e);
    return {
      width: 375,
      height: 667,
      windowWidth: 375,
      windowHeight: 667,
      pixelRatio: 2,
      statusBarHeight: 20
    };
  }
}

/**
 * 刷新环境检测缓存
 * 在特定情况下可能需要刷新缓存，如小程序切前台
 */
function refreshCache() {
  cachedSystemInfo = null;
  cachedIsDevTools = null;
  cachedBluetoothSupport = null;
  cachedWifiSupport = null;
  
  // 重新获取系统信息
  getSystemInfo();
  isDevTools();
}

module.exports = {
  isDevTools,
  isIOS,
  isAndroid,
  getSystemInfo,
  canIUse,
  getSystemTheme,
  getScreenInfo,
  refreshCache,
  supportBluetooth,
  supportWifi
}; 